import { Injectable, OnModuleInit } from '@nestjs/common';
import { PermissionsService } from './permissions.service';

@Injectable()
export class PermissionsSeedService implements OnModuleInit {
  constructor(private readonly permissionsService: PermissionsService) {}

  async onModuleInit() {
    // 系统启动时初始化默认权限
    await this.seedDefaultPermissions();
  }

  private async seedDefaultPermissions() {
    const defaultPermissions = [
      // 用户权限
      { name: '创建用户', code: 'user:create', description: '允许创建新用户' },
      { name: '读取用户', code: 'user:read', description: '允许查看用户信息' },
      { name: '更新用户', code: 'user:update', description: '允许更新用户信息' },
      { name: '删除用户', code: 'user:delete', description: '允许删除用户' },
      
      // 角色权限
      { name: '创建角色', code: 'role:create', description: '允许创建新角色' },
      { name: '读取角色', code: 'role:read', description: '允许查看角色信息' },
      { name: '更新角色', code: 'role:update', description: '允许更新角色信息' },
      { name: '删除角色', code: 'role:delete', description: '允许删除角色' },
      
      // 权限管理
      { name: '创建权限', code: 'permission:create', description: '允许创建新权限' },
      { name: '读取权限', code: 'permission:read', description: '允许查看权限信息' },
      { name: '更新权限', code: 'permission:update', description: '允许更新权限信息' },
      { name: '删除权限', code: 'permission:delete', description: '允许删除权限' },
      
      // 组织机构权限
      { name: '创建组织', code: 'organization:create', description: '允许创建新组织' },
      { name: '读取组织', code: 'organization:read', description: '允许查看组织信息' },
      { name: '更新组织', code: 'organization:update', description: '允许更新组织信息' },
      { name: '删除组织', code: 'organization:delete', description: '允许删除组织' },
      
      // 系统管理权限
      { name: '查看系统信息', code: 'system:read', description: '允许查看系统信息、Redis数据和定时任务' },
      { name: '修改系统设置', code: 'system:write', description: '允许修改Redis数据和管理定时任务' },
    ];

    // 检查每个权限是否存在，不存在则创建
    for (const permission of defaultPermissions) {
      const exists = await this.permissionsService.findByCode(permission.code);
      if (!exists) {
        await this.permissionsService.create(permission);
      }
    }
  }
} 